/*
 Copyright (c) [Year] [name of copyright holder]
 [Software Name] is licensed under Mulan PSL v2.
 You can use this software according to the terms and conditions of the Mulan
 PSL v2.
 You may obtain a copy of Mulan PSL v2 at:
          http://license.coscl.org.cn/MulanPSL2
 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 See the Mulan PSL v2 for more details.
*/

#ifndef _1988WJ_PASTECONVERT_HPP_
#define _1988WJ_PASTECONVERT_HPP_

#include <iostream>
#include <random>
#include <regex>
#include <sstream>
#include <string>

class PasteConvert {
  public:
    /**
     * @brief 将一个字符串转换为两个整数
     *
     * 该函数接受一个字符串作为输入，并将其转换为两个整数num1和num2
     * 字符串应该包含两个由 "*" 或 "x" 或 "X" 字符分隔的整数
     *
     * @param str 输入的字符串，格式应为 "数字*数字" 或 "数字x数字" 或 "数字X数字"
     * @param num1Out 引用参数，将转换后的第一个整数存储于此
     * @param num2Out 引用参数，将转换后的第二个整数存储于此
     */
    static void StrTo2Num(const std::string &str, int &num1Out, int &num2Out);

    static void GenerateUUID(std::string &uuid);

    /**
     * 从给定的字符串中提取尺寸和文本信息。
     *
     * 该函数使用正则表达式来解析输入字符串，旨在提取两个尺寸信息（以毫米为单位）和额外的文本信息。
     * 如果输入字符串符合预期的格式，函数将成功提取信息并返回0；否则，返回1表示失败。
     *
     * @param input 输入字符串，包含尺寸和文本信息。
     * @param dim1 第一个尺寸信息，以毫米为单位。
     * @param dim2 第二个尺寸信息，以毫米为单位。如果没有提供第二个尺寸，则默认为0。
     * @param text 提取的文本信息。
     * @return 0 表示成功提取信息，1 表示提取信息失败。
     */
    static int ExtDimensions(const std::string &input, double &dim1, double &dim2, std::string &text);

    /**
     * @brief 在目标字符串中添加源字符串
     *
     * 此函数旨在将源字符串（src）添加到目标字符串（dest）中，
     * 具体位置由isLeft参数决定,
     * 如果源字符串为空，则不进行任何操作,
     * 如果目标字符串中已包含源字符串，则不会重复添加
     *
     * @param dest 目标字符串，将被源字符串添加到该字符串中
     * @param src 源字符串，要添加到目标字符串中的字符串
     * @param isLeft 布尔值，决定源字符串是添加在目标字符串的左侧（true）还是右侧（false）
     */
    static void AddString(std::string &dest, const std::string &src, bool isLeft);
};
#endif